package com.example.demo.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

// post接口文件上传
@RestController
public class FileUploadController {
    private static String UPLOADED_FOLDER = "E://temp//";

    /**
     * 接口单文件上传
     * @param file
     * @return
     */
    @PostMapping("/upload1")
    public ResultData uploadFile(@RequestParam("file") MultipartFile file) {
        ResultData result = new ResultData();
        if (file.isEmpty()) {
            result.setStatus(505);
            result.setMsg("请选择要上传的文件");
            return result;
        }

        try {
            // 获取原始文件名
            String originalFilename = file.getOriginalFilename();
            // 生成新的文件名，以防止文件名冲突
            String newFilename = UUID.randomUUID().toString() + "_" + originalFilename;

            // 文件保存路径
            String filePath = UPLOADED_FOLDER + newFilename;
            // 保存文件到服务器
            file.transferTo(new File(filePath));

            // 返回文件上传成功的相关信息
            String message = "文件上传成功\n";
            message += "文件名: " + originalFilename + "\n";
            message += "保存路径: " + filePath;
            result.setStatus(200);
            result.setMsg("文件上传成功"+"文件名: "+ originalFilename+"保存路径:" +filePath );
            return result;
        } catch (Exception e) {
            result.setStatus(200);
            result.setMsg(e.getMessage());
            return result;
        }
    }

    /**
     * 接口多文件上传
     * @param files
     * @param redirectAttributes
     * @return
     */
    @PostMapping("/mulupload1") //
    public ResultData muluploadFileUpload(@RequestParam("files") MultipartFile[] files,
                                          RedirectAttributes redirectAttributes) {
        ResultData result = new ResultData();
        // 存储上传成功的文件名，响应给客户端
        List<String> list = new ArrayList<>();
        // 判断文件数组长度
        if(files.length <= 0){
            result.setMsg("请选择文件上传！！！");
            result.setStatus(500);
            return result;
        }
        for(MultipartFile file : files){
            // 源文件名
            String originalFilename = file.getOriginalFilename();
            // 文件格式
            String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
            // 新文件名，避免文件名重复，造成文件替换问题
            String fileName = UUID.randomUUID()+"."+suffix;
            // 文件全路径
            File targetFile = new File(UPLOADED_FOLDER+fileName);

            // 判断文件存储目录是否存在，不存在则新建目录
            if(!targetFile.getParentFile().exists()){
                targetFile.getParentFile().mkdir();
            }
            try {
                // 将图片保存
                file.transferTo(targetFile);
                list.add(targetFile.toString());

            } catch (IOException e) {
                result.setMsg(e.getMessage());
                result.setStatus(500);
                return result;
            }
        }
        result.setMsg("文件上传成功");
        result.setData(list);
        result.setStatus(200);
        return result;
    }
}
